# 子线程之间传递event
# Event对象作为一个标志位，让一个线程便于控制另一个或另一些线程的执行，而控制方式就是修改标志位的布尔值。
from threading import Thread,Event
import time


class Boss(Thread):
    def run(self):
        print("BOSS: 今晚加班到22：00")
        print(event.is_set())  # _flag = False

        event.set()  # 将_flag设置为True，Worker线程往下执行
        time.sleep(5)

        print("BOSS: 22:00了，可以下班了 at ", time.ctime())
        print(event.is_set())

        event.set()  # 宣布下班后，将_flag设置为True，Worker线程继续执行


class Worker(Thread):
    def run(self):
        event.wait()  # 此时Worker线程被阻塞，等待Boss线程先运行
        print("Worker: 命苦啊。。。at ", time.ctime())

        time.sleep(1)

        event.clear()  # 将_flag设置为False
        event.wait()  # 阻塞Worker线程运行，等待老板下班命令

        print("Worker: oh yeah!")


if __name__ == '__main__':

    event = Event()

    threads = []

    for i in range(5):
        threads.append(Worker())

    threads.append(Boss())

    # 开启线程
    for t in threads:
        t.start()

    # 阻塞主线程，让子线程先执行完毕
    for t in threads:
        t.join()
